<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    /*
        全局变量与局部变量
            全局变量：在全局作用域下声明的变量，可以在任意地方中使用，作用范围比较大，我们称为全局变量
            局部变量：在函数内（局部作用域）声明的变量，只在函数中可以使用，作用范围较小，我们称之为局部变量变量的访问规则
            就近原则（如查找变量a）：
                使用变量a时先从当前函数查找，如果当前函数有变量a则使用;
                如果当前函数无变量a,则往父级函数查找，如果找到则使用，并停止查找;
                如果在父级函数还是无法找到，则继续往上一层函数查找，以此类推，直到最顶层(全局作用域)，如果还是没找到，则报not defined错误;
            作用域链：每个函数在定义时就形成了局部作用域，如果存在多个函数嵌套，他们之间就会建立起某种联系，直到全局作用域，这种联系称之为作用域链。当函数访
            问变量时， 根据就近原则在这个作用域链中从内到外查询变量。
    */


    //1.函数内部可以找到全局变量,外部不能访问局部变量:作用域链（由内之外，由下至上,就近原则）
    //2.函数内部也存在声明提前

   //全局变量：函数外面的变量
   var price = 88;

//    function show() {
//        var total = 5;//局部变量：函数里面的变量
//        console.log(price, total);//? 88 55
//    }

//    function show() {
//        var total = 5;//局部变量：函数里面的变量
//        var price = 56;
//        console.log(price, total);//? 56 5 就近原则
//    }

//     function show() {
//         // var price; 声明提前
//        var total = 5;//局部变量：函数里面的变量
//        console.log(price, total);//? undefined 5
//        var price = 56;
//    }

    // function show() {//父函数
    //    var total = 5;//局部变量：函数里面的变量
    //    var price = 56;
    //    function son () {//子函数
    //         var price = 78;
    //         console.log(price, total);//? 78 5
    //    }
    //    son();
    // }


    // function show() {//父函数
    //     // var price;
    //    var total = 5;//局部变量：函数里面的变量
    //    function son () {//子函数
    //         console.log(price, total);//? undefined 5
    //    }
    //    son();
    //    var price = 56;
    // }

    function show() {//父函数
       var total = 5;//局部变量：函数里面的变量
       var price = 56;
       function son () {//子函数
            console.log(price, total);//? 56 5
       }
       son();
       
    }


    function show() {//父函数
       var total = 5;//局部变量：函数里面的变量
       function son () {//子函数
            console.log(price, total);//? 56 5
       }
       var price = 56;
       son();
       
    }

   show();

   

//    console.log(price, total);//? total is not defined
</script>
</html>